#if !defined(OBJECTLIST_HPP)
#define OBJECTLIST_HPP

#include <optional>
#include <memory>
#include <vector>

#include "Eigen"

#include "Ray.hpp"
#include "ShadePayload.hpp"
#include "Object.hpp"


// 一组可以被光线打到的物体，本身仍然可以看作一个能被光线打到的物体
class ObjectList : public Object {
private:
    std::vector<std::shared_ptr<Object>> objs;
    
public:
    ObjectList() :objs() {}
    ObjectList(std::shared_ptr<Object> obj);
    void clear();
    std::optional<ShadePayload> hit(const Ray& ray)const override;
    void add(std::shared_ptr<Object> obj);
    ~ObjectList();
};

#endif // OBJECTLIST_HPP